package algorithm.linkedlist;

import algorithm.model.ListNode;

/**
 * leetcode : https://leetcode.com/problems/reverse-linked-list/description/
 * Diffculty: Easy
 *
 * 单链表反转。
 *
 * 思路很简单，建立一个初始null节点，然后遍历节点列表，挨个next向前指就行
 * 这里要注意，在节点向下指的时候，临时节点要和向下走的指针节点错开。
 * 也就是代码注释的那两行
 * @Author Antony
 * @Since 2018/7/3 18:56
 */
public class ReverseLinkedList {

    public static void main(String[] args) {
        ListNode node = ListNode.initDate(1,7);
        System.out.println(node.nodeString());

        ListNode reverseNode = reverseList(node);
        System.out.println(reverseNode.nodeString());
    }

    public static ListNode reverseList(ListNode head) {
        ListNode temp;
        ListNode first = null;
        while(head != null){
            temp = head;        // 注意：
            head = head.next;   // 需要错开保存节点，不然会把节点指针弄乱
            temp.next = first;
            first = temp;
        }

        return first;
    }
}
